package pe.com.cotelasa.scp.dao.impl;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import pe.com.cotelasa.common.dao.DaoImpl;
import pe.com.cotelasa.common.dao.excepcion.DAOException;
import pe.com.cotelasa.scp.dao.IDAOComposicionArticulo;
import pe.com.cotelasa.scp.dominio.common.ESTADO_REGISTRO;
import pe.com.cotelasa.scp.entidad.Articulo;
import pe.com.cotelasa.scp.entidad.ComposicionArticulo;

/**
 *
 * @author usuario
 */
@SuppressWarnings("unchecked")
@Repository("daoComposicionArticulo")
public class DAOComposicionArticulo extends DaoImpl<ComposicionArticulo, Integer> implements IDAOComposicionArticulo, Serializable {

    @Autowired
    private SessionFactory sessionFactory;

    @Override
    public Collection<ComposicionArticulo> buscarComposicionPorArticulo(ComposicionArticulo composicionArticulo) throws DAOException {
        Collection<ComposicionArticulo> list = new ArrayList<ComposicionArticulo>();
        try {
            sessionFactory.getCurrentSession().flush();
            list = sessionFactory.getCurrentSession().createCriteria(ComposicionArticulo.class)
                    .add(Restrictions.eq("estadoRegistro", ESTADO_REGISTRO.ACTIVO.getValor()))
                    .add(Restrictions.eq("idArticulo", composicionArticulo.getIdArticulo()))
                    .list();
        } catch (Exception e) {
            e.printStackTrace();
            throw new DAOException(e.getMessage(), e);
        }
        return list;
    }
    
    @Override
    public Collection<ComposicionArticulo> buscarArticulosPorComposicion(ComposicionArticulo composicionArticulo) throws DAOException {
        Collection<ComposicionArticulo> list = new ArrayList<ComposicionArticulo>();
        try {
            sessionFactory.getCurrentSession().flush();
            list = sessionFactory.getCurrentSession().createCriteria(ComposicionArticulo.class)
                    .add(Restrictions.eq("estadoRegistro", ESTADO_REGISTRO.ACTIVO.getValor()))
                    .add(Restrictions.eq("idArticuloComp", composicionArticulo.getIdArticuloComp()))
                    .list();
        } catch (Exception e) {
            e.printStackTrace();
            throw new DAOException(e.getMessage(), e);
        }
        return list;
    }
    
    @Override
    public Collection<ComposicionArticulo> buscarArticulosPorComposicionYModelo(ComposicionArticulo composicionArticulo) throws DAOException {
        Collection<ComposicionArticulo> list = new ArrayList<ComposicionArticulo>();
        try {
            sessionFactory.getCurrentSession().flush();
            list = sessionFactory.getCurrentSession().createCriteria(ComposicionArticulo.class)
                    .createAlias("idArticuloComp", "co")
                    .add(Restrictions.eq("estadoRegistro", ESTADO_REGISTRO.ACTIVO.getValor()))
                    .add(Restrictions.like("co.modelo", composicionArticulo.getIdArticuloComp().getModelo()))
                    .list();
        } catch (Exception e) {
            e.printStackTrace();
            throw new DAOException(e.getMessage(), e);
        }
        return list;
    }
}
